package gui_BM;

// Fig. 28.28: TelaConsultaEstoqueaEstoque.java
// Display the contents of the clientes table in the books database.
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.util.regex.PatternSyntaxException;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.JTable;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.table.TableRowSorter;
import javax.swing.table.TableModel;

public class TelaConsultaClientes extends JFrame 
	{
		 // database URL, username and password
		   static final String DATABASE_URL = "jdbc:postgresql://localhost:5432/BasicManagement";
		   static final String USERNAME = "postgres";
		   static final String PASSWORD = "*88233495*";
		   
		   // default query retrieves all data from clientes table
		   static final String DEFAULT_QUERY = "SELECT * FROM cliente";
		   
		   private TabelaConsulta tableModel;
		   private JTextArea queryArea;
		   
		   // create TabelaConsulta and GUI
		   public TelaConsultaClientes() throws ClassNotFoundException 
		   {   
		      super( "Displaying Query Results" );
		      setTitle("Resultados da Busca");
		        
		      // create TabelaConsulta and display database table
		      try 
		      {
		         // create TableModel for results of query SELECT * FROM item_de_estoque
		         tableModel = new TabelaConsulta(DEFAULT_QUERY );

		         // set up JTextArea in which user types queries
		         queryArea = new JTextArea( DEFAULT_QUERY, 3, 100 );
		         queryArea.setWrapStyleWord( true );
		         queryArea.setLineWrap( true );
		         
		         JScrollPane scrollPane = new JScrollPane( queryArea,
		            ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, 
		            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
		         
		         // set up JButton for submitting queries
		         JButton submitButton = new JButton( "Submit Query" );

		         // create Box to manage placement of queryArea and 
		         // submitButton in GUI
		         Box boxNorth = Box.createHorizontalBox();
		         boxNorth.add( scrollPane );
		         boxNorth.add( submitButton );

		         // create JTable based on the tableModel
		         JTable resultTable = new JTable( tableModel );
		         
		         JLabel filterLabel = new JLabel( "Filter:" );
		         final JTextField filterText = new JTextField();
		         JButton filterButton = new JButton( "Apply Filter" );
		         Box boxSouth = Box.createHorizontalBox();
		         
		         boxSouth.add( filterLabel );
		         boxSouth.add( filterText );
		         boxSouth.add( filterButton );
		         
		         // place GUI components on content pane
		         getContentPane().add( boxNorth, BorderLayout.NORTH );
		         getContentPane().add( new JScrollPane( resultTable ), BorderLayout.CENTER );
		         getContentPane().add( boxSouth, BorderLayout.SOUTH );

		         // create event listener for submitButton
		         submitButton.addActionListener( 
		         
		            new ActionListener() 
		            {
		               // pass query to table model
		               public void actionPerformed( ActionEvent event )
		               {
		                  // perform a new query
		                  try 
		                  {
		                     tableModel.setQuery( queryArea.getText() );
		                  } // end try
		                  catch ( SQLException sqlException ) 
		                  {
		                     JOptionPane.showMessageDialog( null, 
		                        sqlException.getMessage(), "Database error", 
		                        JOptionPane.ERROR_MESSAGE );
		                     
		                     // try to recover from invalid user query 
		                     // by executing default query
		                     try 
		                     {
		                        tableModel.setQuery( DEFAULT_QUERY );
		                        queryArea.setText( DEFAULT_QUERY );
		                     } // end try
		                     catch ( SQLException sqlException2 ) 
		                     {
		                        JOptionPane.showMessageDialog( null, 
		                           sqlException2.getMessage(), "Database error", 
		                           JOptionPane.ERROR_MESSAGE );
		         
		                        // ensure database connection is closed
		                       tableModel.disconnectFromDatabase();
		         
		                        System.exit( 1 ); // terminate application
		                     } // end inner catch                   
		                  } // end outer catch
		               } // end actionPerformed
		            }  // end ActionListener inner class          
		         ); // end call to addActionListener
		         
		         final TableRowSorter< TableModel > sorter = 
		            new TableRowSorter< TableModel >( tableModel );
		         resultTable.setRowSorter( sorter );
		         setSize( 500, 250 ); // set window size
		         setVisible( true ); // display window  
		         
		         // create listener for filterButton
		         filterButton.addActionListener(            
		            new ActionListener() 
		            {
		               // pass filter text to listener
		               public void actionPerformed( ActionEvent e ) 
		               {
		                  String text = filterText.getText();

		                  if ( text.length() == 0 )
		                     sorter.setRowFilter( null );
		                  else
		                  {
		                     try
		                     {
		                        sorter.setRowFilter( 
		                           RowFilter.regexFilter( text ) );
		                     } // end try
		                     catch ( PatternSyntaxException pse ) 
		                     {
		                        JOptionPane.showMessageDialog( null,
		                           "Bad regex pattern", "Bad regex pattern",
		                           JOptionPane.ERROR_MESSAGE );
		                     } // end catch
		                  } // end else
		               } // end method actionPerfomed
		            } // end annonymous inner class
		         ); // end call to addActionLister
		      } // end try
		      catch ( SQLException sqlException ) 
		      {
		         JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
		            "Database error", JOptionPane.ERROR_MESSAGE );
		               
		         // ensure database connection is closed
		        tableModel.disconnectFromDatabase();
		         
		         System.exit( 1 ); // terminate application
		      } // end catch
		      
		      // dispose of window when user quits application (this overrides
		      // the default of HIDE_ON_CLOSE)
		      setDefaultCloseOperation( DISPOSE_ON_CLOSE );
		      
		      // ensure database connection is closed when user quits application
		      addWindowListener(
		      
		         new WindowAdapter() 
		         {
		            // disconnect from database and exit when window has closed
		            public void windowClosed( WindowEvent event )
		            {
		               tableModel.disconnectFromDatabase();
		               System.exit( 0 );
		            } // end method windowClosed
		         } // end WindowAdapter inner class
		      ); // end call to addWindowListener
		   } // end TelaConsultaEstoque constructor
		   
		   // execute application
		   public static void main( String args[] ) throws ClassNotFoundException 
		   {
		      new TelaConsultaEstoque();     
		   }
} // end class TelaConsultaEstoqueaEstoque




/**************************************************************************
	 * (C) Copyright 1992-2010  by Deitel & Associates, Inc. and               *
	 * Pearson Education, Inc. All Rights Reserved.                           *
	 *                                                                        *
	 * DISCLAIMER: The clientes and publisher of this book have used their     *
	 * best efforts in preparing the book. These efforts include the          *
	 * development, research, and testing of the theories and programs        *
	 * to determine their effectiveness. The clientes and publisher make       *
	 * no warranty of any kind, expressed or implied, with regard to these    *
	 * programs or to the documentation contained in these books. The clientes *
	 * and publisher shall not be liable in any event for incidental or       *
	 * consequential damages in connection with, or arising out of, the       *
	 * furnishing, performance, or use of these programs.                     *
	 *************************************************************************/
